#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
认证系统初始化脚本
用于创建管理员用户和测试认证功能
"""

import os
import sys
from datetime import datetime

# 添加项目根目录到Python路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

def init_database():
    """初始化数据库"""
    try:
        from app import create_app, db
        from database import User
        
        app = create_app()
        
        with app.app_context():
            # 创建所有表
            db.create_all()
            print("✅ 数据库表创建成功")
            
            # 检查是否已存在用户
            user_count = User.query.count()
            print(f"📊 当前用户数量: {user_count}")
            
            if user_count == 0:
                # 创建默认管理员用户
                admin = User(
                    username='admin',
                    email='admin@example.com',
                    is_admin=True,
                    is_active=True,
                    created_at=datetime.utcnow()
                )
                admin.set_password('admin123')
                
                db.session.add(admin)
                db.session.commit()
                
                print("✅ 默认管理员用户创建成功")
                print("   用户名: admin")
                print("   密码: admin123")
                print("   邮箱: admin@example.com")
                print("   权限: 管理员")
                print("   ⚠️  请及时修改默认密码！")
            else:
                print("✅ 用户表已存在，跳过默认用户创建")
                
                # 显示现有用户
                users = User.query.all()
                print("\n📋 现有用户列表:")
                for user in users:
                    status = "✅ 正常" if user.is_active else "❌ 禁用"
                    role = "👑 管理员" if user.is_admin else "👤 普通用户"
                    print(f"   {user.username} ({user.email}) - {role} - {status}")
            
            return True
            
    except Exception as e:
        print(f"❌ 数据库初始化失败: {e}")
        return False

def create_test_user():
    """创建测试用户"""
    try:
        from app import create_app, db
        from database import User
        
        app = create_app()
        
        with app.app_context():
            # 检查测试用户是否已存在
            test_user = User.query.filter_by(username='testuser').first()
            
            if test_user:
                print("✅ 测试用户已存在")
                return True
            
            # 创建测试用户
            test_user = User(
                username='testuser',
                email='test@example.com',
                is_admin=False,
                is_active=True,
                created_at=datetime.utcnow()
            )
            test_user.set_password('test123')
            
            db.session.add(test_user)
            db.session.commit()
            
            print("✅ 测试用户创建成功")
            print("   用户名: testuser")
            print("   密码: test123")
            print("   邮箱: test@example.com")
            print("   权限: 普通用户")
            
            return True
            
    except Exception as e:
        print(f"❌ 测试用户创建失败: {e}")
        return False

def test_authentication():
    """测试认证功能"""
    try:
        from app import create_app
        from database import User
        from werkzeug.security import check_password_hash
        
        app = create_app()
        
        with app.app_context():
            print("\n🧪 测试认证功能...")
            
            # 测试用户查找
            admin = User.query.filter_by(username='admin').first()
            if admin:
                print("✅ 管理员用户查找成功")
                
                # 测试密码验证
                if admin.check_password('admin123'):
                    print("✅ 密码验证成功")
                else:
                    print("❌ 密码验证失败")
            else:
                print("❌ 管理员用户查找失败")
            
            # 测试普通用户
            test_user = User.query.filter_by(username='testuser').first()
            if test_user:
                print("✅ 测试用户查找成功")
                
                if test_user.check_password('test123'):
                    print("✅ 测试用户密码验证成功")
                else:
                    print("❌ 测试用户密码验证失败")
            else:
                print("⚠️ 测试用户不存在")
                
            return True
            
    except Exception as e:
        print(f"❌ 认证功能测试失败: {e}")
        return False

def show_usage_info():
    """显示使用说明"""
    print("\n📖 使用说明:")
    print("1. 启动应用: python app.py")
    print("2. 访问登录页面: http://localhost:5000/auth/login")
    print("3. 使用默认管理员账户登录:")
    print("   用户名: admin")
    print("   密码: admin123")
    print("4. 登录后可以:")
    print("   - 修改默认密码")
    print("   - 创建新用户")
    print("   - 管理服务器配置")
    print("   - 执行镜像传输任务")
    
    print("\n🔒 安全建议:")
    print("1. 立即修改默认管理员密码")
    print("2. 使用强密码（包含字母、数字、特殊字符）")
    print("3. 定期更换密码")
    print("4. 限制管理员账户数量")
    print("5. 监控用户登录活动")

def main():
    """主函数"""
    print("🚀 镜像传输系统 - 认证模块初始化")
    print("=" * 50)
    
    try:
        # 初始化数据库
        if not init_database():
            print("❌ 初始化失败，请检查错误信息")
            return
        
        # 创建测试用户
        create_test_user()
        
        # 测试认证功能
        test_authentication()
        
        # 显示使用说明
        show_usage_info()
        
        print("\n🎉 认证系统初始化完成！")
        
    except KeyboardInterrupt:
        print("\n\n⚠️ 用户中断操作")
    except Exception as e:
        print(f"\n❌ 初始化过程中发生错误: {e}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    main() 